package com.renne.ai.dbcmcp.service.impl;

import com.alibaba.fastjson2.JSON;
import com.renne.ai.dbcmcp.mapper.ChartsMapper;
import com.renne.ai.dbcmcp.service.ChatService;

import com.renne.ai.dbcmcp.utils.SpringUtils;
import io.micrometer.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class ChatServiceImpl implements ChatService {

    @Override
    @Tool(name = "getOilBillByMonth", description = """
            查询指定时间段内每个月的油单总数。
            该函数通过开始和结束的时间参数，获取油单的统计数量，并将结果以json格式返回。
            返回的数据是图表的配置数据，不需要修改，可以直接使用。
            """)
    public String getOilBillByMonth(@ToolParam(description = "开始时间，格式为： yyyy-MM-dd HH:mm:ss") String start_time, @ToolParam(description = "结束时间,格式为： yyyy-MM-dd HH:mm:ss") String end_time) {
            if (StringUtils.isBlank(start_time) || StringUtils.isBlank(end_time)) {
                // 参数缺失，返回空数组
                return "[]";
            }

            List<Map<String, Object>> list = new ArrayList<>();
            try {

                ChartsMapper chartsMapper = SpringUtils.getBean(ChartsMapper.class);
                list = chartsMapper.oilBillByMonth(start_time, end_time);
            } catch (Exception e) {
                e.printStackTrace();
                // 记录日志，防止异常信息暴露给前端
                // logger.error("查询油费账单数据异常", e);
                return "[]"; // 异常时返回空数组
            }

            return JSON.toJSONString(list == null ? Collections.emptyList() : list);
    }
}
